home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 1.iso / toolbox / documents / video / lurker / ij / testij.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-11-11  |  4.3 KB  |  160 lines

  1. /*
  2.    testij.c - test device-independent input jacks for VL
  3. */
  4.  
  5. #include "ij.h"
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <assert.h>
  10. #include <stdarg.h>
  11.  
  12. /* Utility Routines ---------------------------------------------------- */
  13.  
  14. void vlerror_exit(char *format, ...)
  15. {
  16.   va_list ap;
  17.   
  18.   va_start(ap, format);
  19.   vfprintf( stderr, format, ap );
  20.   va_end(ap);
  21.  
  22.   if (vlErrno != 0)
  23.     fprintf( stderr, " (vlErrno=%s)", vlStrError(vlErrno) );
  24.  
  25.   fprintf( stderr, "\n" );
  26.   exit(2);
  27. }
  28.  
  29. /* main ------------------------------------------------------------- */
  30.  
  31. int trypath2(VLServer svr, IJhandle h, int idx, 
  32.              int *ret_idx, int *ret_node_number,
  33.              VLNode drain_node)
  34. {
  35.   int node_number = ijGetNodeNumber(h, idx);
  36.   VLDev device = ijGetVLDev(h);
  37.   VLNode source_node = vlGetNode(svr, VL_SRC, VL_VIDEO, node_number);
  38.   VLPath path = vlCreatePath(svr, device, source_node, drain_node);
  39.  
  40.   if (node_number < 0 || source_node < 0 || path < 0) 
  41.     return FALSE;
  42.   
  43.   if (vlSetupPaths(svr, (VLPathList)&path, 1, VL_SHARE, VL_SHARE) < 0)
  44.     { vlDestroyPath(svr, path); return FALSE; }
  45.  
  46.   if (ijConfigurePath(h, idx, 
  47.                       source_node, drain_node, path, 
  48.                       node_number, ret_idx))
  49.     { vlDestroyPath(svr, path); return FALSE; }
  50.   
  51.   if (ret_node_number) *ret_node_number = node_number;
  52.  
  53.   vlDestroyPath(svr, path);
  54.   return TRUE;
  55. }
  56.  
  57. int trypath(VLServer svr, IJhandle h, int idx, 
  58.             VLNode drain_node)
  59. {
  60.   int ret_idx;
  61.   int ret_node_number;
  62.  
  63.   if (!trypath2(svr, h, idx, &ret_idx, &ret_node_number, drain_node))
  64.     {
  65.       if (idx == VL_ANY)
  66.         printf("XXX attempt to open default jack on device [%s] FAILED\n",
  67.                ijGetDeviceName(h));
  68.       else
  69.         printf("XXX attempt to open jack %d on device [%s] FAILED\n",
  70.                idx, ijGetDeviceName(h));
  71.       return FALSE;
  72.     }
  73.   else
  74.     {
  75.       if (idx == VL_ANY)
  76.         printf("    opening default jack ");
  77.       else
  78.         printf("    opening jack %d ", idx);
  79.       printf(": idx=%d, node_number=%d\n",
  80.              ret_idx, ret_node_number);
  81.       return TRUE;
  82.     }
  83. }
  84.  
  85. void main(int argc, char **argv)
  86. {
  87.   int dv, j;
  88.   VLDevList devlist;
  89.   IJhandle h;
  90.   VLServer vlServer;
  91.   VLNode drain_node;
  92.  
  93.   if (NULL == (vlServer=vlOpenVideo("")))
  94.     vlerror_exit("error opening video");
  95.       
  96.   if (vlGetDeviceList(vlServer, &devlist) < 0)
  97.     vlerror_exit("error getting device list");
  98.   
  99.   printf("\n=== Printing VL names of devices:\n");
  100.  
  101.   for (dv=0; dv < (int)devlist.numDevices; dv++)
  102.     printf("the device with VLDev %d is called [%s]\n",  
  103.            devlist.devices[dv].dev,
  104.            devlist.devices[dv].name);
  105.  
  106.   printf("\n=== Printing jacks for all devices:\n");
  107.  
  108.   {
  109.     for (dv=0; dv < (int)devlist.numDevices; dv++)
  110.       {
  111.         VLDev dev = devlist.devices[dv].dev;
  112.         
  113.         printf("--- opening device with VLDev %d (%s)\n", dev, 
  114.                devlist.devices[dv].name);
  115.         if ((drain_node = vlGetNode(vlServer, VL_DRN, VL_MEM, VL_ANY)) < 0)
  116.           vlerror_exit("error getting memory drain node");
  117.         if (NULL == (h = ijOpenHandle(vlServer, dev, drain_node)))
  118.           vlerror_exit("error opening specific ij handle");
  119.         printf("--- this device is really: [%s]\n", ijGetDeviceName(h));
  120.         assert(ijGetVLDev(h) == dev);
  121.         
  122.         for(j=0; j < ijGetNumJacks(h); j++)
  123.           {
  124.             printf("ij jack number %d is [%s]\n", j, ijGetJackName(h, j));
  125.             trypath(vlServer, h, j, drain_node);
  126.           }
  127.         
  128.         printf("ij default jack is:\n");
  129.         trypath(vlServer, h, VL_ANY, drain_node);
  130.         
  131.         ijCloseHandle(h);
  132.       }
  133.   }
  134.   
  135.   printf("\n=== Finding the default device:\n");
  136.  
  137.   /* print default device */
  138.   {
  139.     if ((drain_node = vlGetNode(vlServer, VL_DRN, VL_MEM, VL_ANY)) < 0)
  140.       vlerror_exit("error getting memory drain node");
  141.     if (NULL == (h = ijOpenHandle(vlServer, VL_ANY, drain_node)))
  142.       vlerror_exit("error opening VL_ANY ij handle");
  143.     
  144.     printf("The default device is VLDev %d ", ijGetVLDev(h));
  145.     for (dv=0; dv < (int)devlist.numDevices; dv++)
  146.       if (devlist.devices[dv].dev == ijGetVLDev(h))
  147.         {
  148.           printf("(%s)\n", devlist.devices[dv].name);
  149.           break;
  150.         }
  151.     assert(dv != (int)devlist.numDevices);
  152.     
  153.     ijCloseHandle(h);
  154.   }
  155.  
  156.   vlCloseVideo(vlServer);
  157. }
  158.  
  159.  
  160.